from typing import List
from llama_index.embeddings.huggingface import HuggingFaceEmbedding

from ..embedding_interface import EmbeddingInterface
from .huggingface_embedding_config import HuggingFaceEmbeddingConfig


class HuggingFaceEmbeddingService(EmbeddingInterface):
    """
    一个实现了 EmbeddingInterface 的具体服务，
    它在内部使用 LlamaIndex 的 HuggingFaceEmbedding 来加载本地模型。
    """

    def __init__(self, config: HuggingFaceEmbeddingConfig):
        self._config = config
        self._embed_model = HuggingFaceEmbedding(
            model_name=config.model_name,
            device=config.device
        )

    async def embed(self, texts: List[str]) -> List[List[float]]:
        """
        异步调用本地模型生成文本向量。
        """
        # HuggingFaceEmbedding 遵循 LlamaIndex 的标准接口，
        # aget_text_embedding_batch 会在后台线程池中运行同步的 embed 方法。
        return await self._embed_model.aget_text_embedding_batch(texts)

    def get_native_model(self) -> HuggingFaceEmbedding:
        """
        返回底层的 LlamaIndex HuggingFaceEmbedding 实例。
        """
        return self._embed_model 